Importation et prétraitement des données

data <- read_delim('data_ulule_2019.csv', locale = locale(encoding = stri_enc_get()))
paged_table(data)
colnames(data)
##  [1] "...1"           "absolute_url"   "amount_raised"  "comments_count"
##  [5] "country"        "finished"       "goal"           "is_cancelled"  
##  [9] "city"           "region"         "category"       "percent"       
## [13] "status"         "currency"       "date_end"       "date_start"    
## [17] "id"             "goal_raised"    "lang"           "finished.1"    
## [21] "news_count"

Supression des variables n’ayant aucun interet

data <- data %>% select(-c("absolute_url","finished.1","percent","city","lang","comments_count","news_count","...1","region"))

Supression des valeurs manquantes et dupliquées

data <- data %>% drop_na() %>% distinct()

On va exclure du périmètre les campagnes annulées.

data<-data %>% filter(is_cancelled =="FALSE")

On va garder ici que les 8 pays qui ont le plus de campagnes

#methode dplyr pour choisir les 8 premiers pays qui ont le plus de campagnes 
pays <- data %>%
  group_by(country) %>% 
  summarise(nbre_campagne=sum(is_cancelled==FALSE)) %>% 
  arrange(desc(nbre_campagne)) %>%
  slice(1:8) %>%
  select(country)

pays <- as.vector(pays$country)
#On va garder seulement les 8 pays qui ont le plus de campagnes 
data<-data %>%filter(country %in% pays) 

On va exclure le mois le plus récent ou les données seraient eventuellement incomplètes

most_recent_date <-
  data %>% select(date_start) %>% arrange(desc(date_start)) %>% slice(1) %>% mutate(month = month(date_start), year = year(date_start))

month_to_eliminate <-
  data %>% filter(
    month(date_start) == most_recent_date$month &
      year(date_start) == most_recent_date$year
  )

data <- data %>% anti_join(month_to_eliminate)

Convertir les devises en EURO

table(data$currency)
## 
##   CAD   CHF   EUR   GBP   USD 
##   744    77 41910    36    16
#Convertir les devises en euro
USD_EUR<-0.88
CAD_EUR<-0.69
CHF_EUR<-0.96
GBP_EUR<-1.17

data <- data%>%
  mutate(montant = case_when(currency == "USD" ~ amount_raised*USD_EUR,
                           currency == "CAD" ~ amount_raised*CAD_EUR,
                           currency == "CHF" ~ amount_raised*CHF_EUR,
                           currency == "GBP" ~ amount_raised*GBP_EUR,
                           currency == "EUR" ~ amount_raised
                           
                           ))

Ajout de la variable nombre de jours des campagnes

data <- data %>% 
  mutate( nombre_de_jours= day(as.period(difftime(date_end,date_start))))

On va créer une nouvelle variable categories regroupant les 6 principales catégories

## Liste des 6 principales catégories

categories_principales <- data %>%
  group_by(category) %>% 
  summarise(nbre_campagne=sum(is_cancelled==FALSE)) %>% 
  arrange(desc(nbre_campagne)) %>%
  slice(1:6) %>%
  select(category)

categories_principales <- as.vector(categories_principales$category)

## creaction d'une fonction
`%!in%` <- Negate(`%in%`)

## Ajout d'une nouvelle variable categories
data<-data %>%
  mutate(categories = case_when(category %in% categories_principales~category,
                           category %!in% categories_principales~"autre"
                           
                           ))

Visualisations

Nombre de campagnes par catégorie (sur 6 catégories / regroupements de catégories)

nombre_categories_bars <- data %>% filter(categories!="autre") %>% 
ggplot() + geom_bar(aes(y = categories),fill=1:6)+xlab("Nombre de campagnes")+ylab("Catégories")+
  ggtitle("Nombre de campagnes par catégories.")
nombre_categories_bars

ggplotly(nombre_categories_bars)

Nombre de campagnes par pays (sur 8 pays / regroupement de pays)

nombre_pays_bars <-  data %>%
  ggplot( ) + geom_bar(aes(y = country),fill=1:8)+xlab("Nombre de campagnes")+ylab("Pays")+
  ggtitle( "Nombre de campagnes par pays." )
nombre_pays_bars

ggplotly(nombre_pays_bars)

Distribution de la durée des campagnes

# Graphique
distribution_duree <- data %>% 
ggplot() + geom_histogram(aes(x = nombre_de_jours),fill=5)+xlab("Durée")+
  ggtitle( "Distribution de la durée des campagnes." )

distribution_duree

ggplotly(distribution_duree)

Récupération des valeurs des deux dernières années

# Divisuon des dates de debut en mois et annees
data <-  data %>%
  mutate(
        year_start=year(date_start), 
        month_start=month(date_start)
    )
# Valeurs des deux dernières années 
deux_dernieres_annees <- data %>% 
  select(year_start) %>% 
  distinct() %>% 
  arrange(desc(year_start)) %>%
  slice(1:2) %>%
  select(year_start)

deux_dernieres_annees <- as.vector(deux_dernieres_annees$year_start)
deux_dernieres_annees
## [1] 2019 2018

Evolution du nombre de campagnes crées au fil des mois, sur les deux dernières années

#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel

liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)


nombre_de_campagnes_par_mois <- data %>% 
  filter(categories %in% liste_categories)%>%
  filter( year_start %in% deux_dernieres_annees) %>% 
  group_by(month_start,year_start) %>% 
  summarise(nbre_campagnes=sum(is_cancelled==FALSE)) %>% 
  mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>% 
  arrange(year_start)

nombre_courbe <- ggplot(data=nombre_de_campagnes_par_mois,aes(x=date,y=nbre_campagnes))+
  geom_line(color="blue")+
    theme_bw() +
  labs(x = "Mois", y = "Nombre de campagnes") +
  ggtitle("Evolution du nombre de campagnes par mois")
nombre_courbe

ggplotly(nombre_courbe)

Evolution de la proportion de campagnes financées au fil des mois, sur les deux dernières années

#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel

liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)


proportion_de_campagnes_financees <- data %>% 
  filter(categories %in% liste_categories)%>%
  filter( year_start %in% deux_dernieres_annees) %>% 
  group_by(month_start,year_start) %>% 
  summarise(proportion_cam_financees=sum(goal_raised==TRUE)/sum(is_cancelled==FALSE)) %>% 
  mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>% 
  arrange(year_start)

proportion_courbe <- ggplot(data=proportion_de_campagnes_financees,aes(x=date,y=proportion_cam_financees))+
  geom_line(color="blue")+
    theme_bw() +
  labs(x = "Mois", y = "Proportion de campagnes financées") +
  ggtitle("Evolution de la proportion de campagnes financées")
proportion_courbe

ggplotly(proportion_courbe)

Evolution des montants moyens des campagnes financées au fil des mois / années, sur les deux dernières années

#Pour l'application on peut récupérer la liste de catégories et le graphique est directement opérationnel

liste_categories <- data %>% select(categories) %>% distinct()
liste_categories <- as.vector(liste_categories$categories)


montant_moyen_de_campagnes_financees <- data %>% 
  filter(categories %in% liste_categories)%>%
  filter( year_start %in% deux_dernieres_annees & goal_raised==TRUE) %>% 
  group_by(month_start,year_start) %>% 
  summarise(montant_moyen=mean(amount_raised)) %>% 
  mutate(date= as.Date(paste(year_start,month_start,"01",sep="-"),"%Y-%m-%d")) %>% 
  arrange(year_start)

courbe <- ggplot(data=montant_moyen_de_campagnes_financees,aes(x=date,y=montant_moyen))+
  geom_line(color="blue")+
    theme_bw() +
  labs(x = "Mois", y = "Montant moyen") +
  ggtitle("Evolution du montant moyen de campagnes financées")
courbe

ggplotly(courbe)